package net.fltx.taskmgr.win32api;

import com.sun.jna.Native;
import com.sun.jna.Structure;
import com.sun.jna.win32.StdCallLibrary;

public interface Gdi32 extends StdCallLibrary {
    Gdi32 INSTANCE = Native.load("Gdi32", Gdi32.class);


    /**
     * 取得对指定对象进行说明的一个结构。
     * @param hObject 对象句柄
     * @param nCount 结构体大小
     * @param lpObject 对象的结构体
     * @return 如lpObject设为零（用ByVal As Long在这种情况下传递一个NULL参数），则必须设置缓冲区的长度。如执行成功，返回载入结构内部的实际字节数；如失败，返回零值
     */
    int GetObjectA (int hObject , int nCount , Bitmap lpObject);
    int GetObjectW (int hObject , int nCount , Bitmap lpObject);
    /**
     *
     * 将来自位图的二进制位复制到一个缓冲区
     * @param hBitmap 绘图句柄
     * @param dwCount 欲复制的字节数。如设为零，表示取得位图中的字节数
     * @param lpBytes 指向容纳位图位的一个缓冲区的指针。注意事先将缓冲区至少初始化成dwCount个字节
     * @return
     */
    int GetBitmapBits(int hBitmap,int dwCount ,byte[] lpBytes);

    /**
     *  用这个函数删除GDI对象，比如画笔、刷子、字体、位图、区域以及调色板等等。对象使用的所有系统资源都会被释放
     * @param hObject 画笔、刷子、字体、位图、区域以及调色板等等。
     * @return 非零表示成功，零表示失败
     */
    boolean DeleteObject (int hObject);

    /**
     * 创建内存DC
     * @param hdc 要加入的DC句柄
     * @return 内存DC句柄
     */
    int CreateCompatibleDC(int hdc);

    /**
     * 获取场景上指定点的颜色
     * @param hDC 场景句柄
     * @param XPos
     * @param YPos
     * @return RGB
     */
    int GetPixel(int hDC, int XPos, int YPos);

    /**
     * 删除创建的场景
     * @param hdc 场景句柄
     * @return
     */
    int DeleteDC(int hdc);

    /**
     *
     * @param hdc 目标场景
     * @param x
     * @param y
     * @param cWidth
     * @param cHeight
     * @param hdcSrc
     * @param x1
     * @param y1
     * @param rop
     * @return
     */
    boolean BitBlt(int hdc,  int x,  int y,  int cWidth,  int cHeight, int hdcSrc,  int x1,  int y1,  int rop);

    /**
     * 每个设备场景都可能有选入其中的图形对象。
     * @param hdc 场景句柄
     * @param hObject 位图句柄
     */
    int SelectObject(int hdc , int hObject );

}
